// pages/psychological-test/test/test.js
// 引入测试题目管理工具
const testQuestionManager = require('../../../utils/testQuestionManager.js');
// 获取数据库引用
const db = wx.cloud.database();
// 移除对不存在集合的引用
// const testConfigCollection = db.collection('test_config');

Page({
  // 初始化页面数据
  data: {
    testType: '',       // 测试类型（SAS或SDS）
    testName: '',       // 测试名称
    questions: [],      // 存储测试题目数组
    currentQuestion: 0, // 当前显示的题目索引
    selectedAnswer: null, // 当前选中的答案索引
    answers: [],        // 存储所有题目的答案
    loading: true,      // 加载状态标记
    testConfig: {       // 测试评分配置
      standardFactor: 1.25,  // 标准分转换因子，默认1.25倍
      mildThreshold: 50,     // SAS默认轻度焦虑阈值
      moderateThreshold: 60, // SAS默认中度焦虑阈值
      severeThreshold: 70    // SAS默认重度焦虑阈值
    },
  },

  // 页面加载事件
  onLoad: function(options) {
    // 获取测试类型参数
    const testType = options.type;
    // 根据测试类型设置测试名称和阈值
    let testName = '';
    if (testType === 'SAS') {
      testName = '焦虑自评量表';
    } else if (testType === 'SDS') {
      testName = '抑郁自评量表';
      // 为SDS设置不同的阈值配置
      this.setData({
        testConfig: {
          standardFactor: 1.25,
          mildThreshold: 53,     // SDS轻度抑郁阈值
          moderateThreshold: 63, // SDS中度抑郁阈值
          severeThreshold: 73    // SDS重度抑郁阈值
        }
      });
    }
    
    // 更新页面数据并设置加载状态
    this.setData({
      testType,
      testName,
      loading: true
    });
    
    // 加载测试题目
    this.loadQuestions(testType)
      .catch(error => {
        console.error('初始化失败:', error);
        wx.hideLoading();
        wx.showToast({
          title: '初始化失败',
          icon: 'none'
        });
      });
  },
  
  // 从数据库加载测试题目
  loadQuestions: async function(testType) {
    try {
      // 显示加载提示
      wx.showLoading({
        title: '加载中',
      });
      
      // 调用题目管理工具获取指定类型的题目
      const questions = await testQuestionManager.getTestQuestions(testType);
      
      // 检查是否成功获取到题目
      if (questions.length === 0) {
        wx.hideLoading();
        wx.showToast({
          title: '未找到测试题目',
          icon: 'none'
        });
        // 如果没有题目，延迟返回上一页
        setTimeout(() => {
          wx.navigateBack();
        }, 1500);
        return;
      }
      
      // 对问题按照问题序号排序
      questions.sort((a, b) => a.questionIndex - b.questionIndex);
      
      console.log('从数据库加载到的题目:', questions);
      
      // 更新页面数据，初始化答案数组，关闭加载状态
      this.setData({
        questions,
        answers: new Array(questions.length).fill(null), // 创建与题目数量相同的空答案数组
        loading: false
      });
      
      wx.hideLoading();
    } catch (error) {
      // 处理加载失败的情况
      console.error('加载题目失败', error);
      wx.hideLoading();
      wx.showToast({
        title: '加载题目失败',
        icon: 'none'
      });
    }
  },

  // 处理用户选择答案
  selectAnswer: function(e) {
    // 获取用户点击的选项索引
    const index = e.currentTarget.dataset.index;
    // 更新选中状态和答案数组
    this.setData({
      selectedAnswer: index,
      ['answers[' + this.data.currentQuestion + ']']: index
    });
  },

  // 处理上一题按钮点击
  prevQuestion: function() {
    // 检查是否可以回到上一题
    if (this.data.currentQuestion > 0) {
      // 更新当前题目索引，并恢复之前选择的答案
      this.setData({
        currentQuestion: this.data.currentQuestion - 1,
        selectedAnswer: this.data.answers[this.data.currentQuestion - 1]
      });
    }
  },

  // 处理下一题/完成按钮点击
  nextQuestion: function() {
    // 检查是否还有下一题
    if (this.data.currentQuestion < this.data.questions.length - 1) {
      // 前往下一题，并恢复之前选择的答案（如果有）
      this.setData({
        currentQuestion: this.data.currentQuestion + 1,
        selectedAnswer: this.data.answers[this.data.currentQuestion + 1]
      });
    } else {
      // 如果是最后一题，提交测试结果
      this.submitTest();
    }
  },

  // 提交测试结果并计算得分
  submitTest: function() {
    // 检查是否所有题目都已回答
    if (this.data.answers.includes(null)) {
      wx.showToast({
        title: '请回答所有题目',
        icon: 'none'
      });
      return;
    }

    // 初始化得分计算变量
    let userScore = 0;        // 用户原始得分
    let maxPossibleScore = 0; // 最大可能得分
    
    // 处理每个问题的答案并计算得分
    const detailedAnswers = this.data.answers.map((answerIndex, questionIndex) => {
      const question = this.data.questions[questionIndex];
      const selectedOption = question.options[answerIndex];
      let score = selectedOption.score;
      
      // 处理反向计分题目
      if (question.isReverse) {
        score = 5 - score; // 反转逻辑：1->4, 2->3, 3->2, 4->1
      }
      
      // 累加用户得分和最大可能分数
      userScore += score;
      maxPossibleScore += 4; // 每题满分都是4
      
      // 返回详细的答题记录
      return {
        questionId: question._id,
        questionIndex: question.questionIndex,
        content: question.content,
        isReverse: question.isReverse,
        selectedOptionIndex: answerIndex,
        selectedOptionText: selectedOption.text,
        score: score
      };
    });

    console.log('用户得分:', userScore, '满分:', maxPossibleScore);
    
    // 计算百分比得分（标准化为100分制）
    const scaledScore = Math.round((userScore / maxPossibleScore) * 100);
    console.log('百分比分数:', scaledScore);
    
    // 获取测试评分配置
    const config = this.data.testConfig;
    
    // 根据得分和阈值判断测试结果等级
    let level = '正常';
    if (scaledScore >= config.severeThreshold) {
      level = this.data.testType === 'SAS' ? '重度焦虑' : '重度抑郁';
    } else if (scaledScore >= config.moderateThreshold) {
      level = this.data.testType === 'SAS' ? '中度焦虑' : '中度抑郁';
    } else if (scaledScore >= config.mildThreshold) {
      level = this.data.testType === 'SAS' ? '轻度焦虑' : '轻度抑郁';
    }

    // 构建完整的测试结果对象
    const testResult = {
      type: this.data.testType,         // 测试类型
      name: this.data.testName,         // 测试名称
      originalScore: userScore,          // 原始用户得分
      maxPossibleScore: maxPossibleScore, // 满分总分
      totalScore: scaledScore,           // 百分比分数
      level,                            // 结果等级
      testConfig: this.data.testConfig,  // 使用的评分配置
      answers: this.data.answers,        // 原始答案索引数组
      detailedAnswers: detailedAnswers,  // 详细答题记录
      questions: this.data.questions,    // 完整题目信息
      createTime: new Date()            // 测试完成时间
    };

    // 跳转到结果页面，并传递测试结果数据
    wx.navigateTo({
      url: `/pages/psychological-test/result/result?result=${JSON.stringify(testResult)}`
    });
  }
}); 